package cn.fxzhang.leetcode.no00;

/**
 * 8. 字符串转换整数 (atoi)
 * 0 <= s.length <= 200
 * s 由英文字母（大写和小写）、数字（0-9）、' '、'+'、'-' 和 '.' 组成
 *
 * 类型：字符串处理
 * 题解：逐位判断，注意正负号和边界即可
 * 时间复杂度：O(N)
 * 空间复杂度：O(1)
 *
 * 提交记录(1/1)：
 * 执行用时: 2 ms, 击败了99.57%
 * 内存消耗: 38.3 MB, 击败了89.20%
 * 通过次数273,074提交次数1,276,323
 * 【中等】通过次数116,961提交次数267,848
 * @author 张晓帆
 * @date 2021/4/6
 */
public class P0008_String_To_Integer_Atoi {

    public int myAtoi(String s) {
        if (s==null || s.length()==0){
            return 0;
        }
        s = s.trim();
        // 正负号
        int opt = 1;
        // 结果
        long res = 0;
        for (int i=0; i<s.length(); i++){
            char ch = s.charAt(i);
            if (i == 0 && ch=='-'){
                opt = -1;
                continue;
            }
            if (i == 0 && ch=='+'){
                continue;
            }
            if ('0'<=ch && ch<='9'){
                int k = ch-'0';
                res = res*10+k*opt;
                if (res <= Integer.MIN_VALUE){
                    return Integer.MIN_VALUE;
                }
                if (res >= Integer.MAX_VALUE){
                    return Integer.MAX_VALUE;
                }
            } else{
                break;
            }
        }
        return (int)res;
    }
}
